package com.reactor.错误处理;

import org.junit.Test;

import reactor.core.publisher.Flux;

public class Retry {

	@Test
	//还有一个用于错误处理的操作符你可能会用到，就是retry，见文知意，用它可以对出现错误的序列进行重试。
	//请注意：**retry对于上游Flux是采取的重订阅（re-subscribing）的方式，因此重试之后实际上已经一个不同的序列了， 发出错误信号的序列仍然是终止了的。举例如下：
	//输出如下：
	//5
	//10
	//5
	//10
	//java.lang.ArithmeticException: / by zero
	//可见，retry不过是再一次从新订阅了原始的数据流，从1开始。第二次，由于异常再次出现，便将异常传递到下游了。
	public void test() throws InterruptedException{
		Flux.range(1, 6)
	    .map(i -> 10 / (3 - i))
	    .retry(1)
	    .subscribe(System.out::println, System.err::println);
		Thread.sleep(100);  // 确保序列执行完
	}

}
